import path from 'path'
import { is } from '@electron-toolkit/utils'

/**
 * 获取环境变量值，支持默认值
 */
const getEnv = (key: string, defaultValue: string = ''): string => {
  return process.env[key] || defaultValue
}

/**
 * 获取布尔型环境变量
 */
const getBoolEnv = (key: string, defaultValue: boolean = false): boolean => {
  const value = process.env[key]
  if (value === undefined) return defaultValue
  return value === 'true'
}

/**
 * 获取数字型环境变量
 */
const getNumberEnv = (key: string, defaultValue: number = 0): number => {
  const value = process.env[key]
  if (value === undefined) return defaultValue
  const parsed = parseInt(value, 10)
  return isNaN(parsed) ? defaultValue : parsed
}

/**
 * 应用配置
 */
export const AppConfig = {
  // 应用 ID
  APP_USER_MODEL_ID: getEnv('APP_USER_MODEL_ID', 'com.electron'),

  // 窗口默认配置
  WINDOW: {
    DEFAULT_WIDTH: getNumberEnv('WINDOW_DEFAULT_WIDTH', 1000),
    DEFAULT_HEIGHT: getNumberEnv('WINDOW_DEFAULT_HEIGHT', 800),
    AUTO_HIDE_MENU_BAR: getBoolEnv('WINDOW_AUTO_HIDE_MENU_BAR', true)
  },

  // 日志配置
  LOG: {
    // 日志根目录
    ROOT_DIR: getEnv(
      'LOG_ROOT_DIR',
      is.dev ? path.join(__dirname, '../../log') : path.join(path.dirname(process.execPath), 'log')
    ),

    // 是否按天创建文件夹
    DAILY_FOLDER: getBoolEnv('LOG_DAILY_FOLDER', true),

    // 日志级别
    LEVEL: getEnv('LOG_LEVEL', is.dev ? 'debug' : 'info'),

    // 文件大小限制
    MAX_SIZE: getEnv('LOG_MAX_SIZE', '20m'),

    // 保留天数
    MAX_FILES: getEnv('LOG_MAX_FILES', '30d'),

    // 是否压缩历史文件
    ZIPPED_ARCHIVE: getBoolEnv('LOG_ZIPPED_ARCHIVE', true),

    // 是否启用审计日志
    AUDIT_FILE: getBoolEnv('LOG_AUDIT_FILE', false)
  },

  // API 配置
  API: {
    BASE_URL: getEnv('API_BASE_URL', 'https://api.example.com'),
    TIMEOUT: getNumberEnv('API_TIMEOUT', 30000)
  },

  // 功能开关
  FEATURES: {
    CRASH_REPORTER: getBoolEnv('FEATURE_CRASH_REPORTER', !is.dev),
    ANALYTICS: getBoolEnv('FEATURE_ANALYTICS', false),
    HARDWARE_ACCELERATION: getBoolEnv('FEATURE_HARDWARE_ACCELERATION', true),
    DEV_TOOLS: getBoolEnv('FEATURE_DEV_TOOLS', is.dev)
  },

  // 安全配置
  SECURITY: {
    NODE_INTEGRATION: getBoolEnv('SECURITY_NODE_INTEGRATION', false),
    CONTEXT_ISOLATION: getBoolEnv('SECURITY_CONTEXT_ISOLATION', true),
    WEB_SECURITY: getBoolEnv('SECURITY_WEB_SECURITY', true),
    ALLOW_INSECURE_CONTENT: getBoolEnv('SECURITY_ALLOW_INSECURE_CONTENT', false)
  }
} as const
